<template>
  <div>
    <button @click="show = !show">显示/隐藏</button>
    <!-- 
      我们可以给transition设置一个name属性,给当前的动画命名,未来在类名直接使用 name-enter来替换v-enter即可
     -->
    <transition
      @before-enter="beforeEnter"
      @enter="enter"
      @after-enter="afterEnter"
    >
      <div class="box" v-if="show"></div>
    </transition>
  </div>
</template>

<script>
  export default {
    name: "App",
    data() {
      return {
        show: false,
      };
    },
    methods: {
      beforeEnter(el) {
        el.style.transform = "translate(0,0)";
      },
      enter(el, done) {
        el.clientHeight;
        el.style.transform = "translate(100px,30px)";
        el.style.transition = "all 0.2s linear";
        //刚设置动画开始的时候,我们就直接提前执行afterEnter方法(动画要执行1s,afterEnter中让元素消失也是执行1s,所以我们直接在动画开始的时候执行动画结束,刚好动画结束的时候,afterEnter就可以直接执行了)
        done();
      },
      afterEnter() {
        this.show = false;
      },
    },
  };
</script>

<style>
  .box {
    width: 15px;
    height: 15px;
    background-color: rgb(225, 152, 152);
    border-radius: 50%;
  }
  /*  以下类名是transition组件自动匹配的类 */
</style>
